package com.lx.jedis;

import com.lx.util.JedisPoolUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Jedis测试类
 */
public class JedisTest {


    /**
     * string 数据结构操作
     */
    @Test
    public void test1() {
        //1. 获取链接
        Jedis jedis = new Jedis("localhost", 6379);  //默认空参构造 是localhost 6379
        //2. 操作
        //存储
        jedis.set("username", "李星");
        //获取
        String username = jedis.get("username");
        System.out.println(username);


        //使用setex()方法存储可以指定过期时间的 key value
        jedis.setex("activecode", 10, "10s时间");


        //3. 关闭连接
        jedis.close();
    }

    /**
     * hash 数据结构操作
     */
    @Test
    public void test2() {
        //1. 获取链接
        Jedis jedis = new Jedis("localhost", 6379);  //默认空参构造 是localhost 6379
        //2. 操作
        //存储hash
        jedis.hset("user", "username", "李星");
        jedis.hset("user", "age", "23");
        jedis.hset("user", "gender", "male");
        //获取hash
        String name = jedis.hget("user", "username");
        System.out.println(name);
        //获取hash的所有map中的数据
        Map<String, String> user = jedis.hgetAll("user");
        Set<String> keySet = user.keySet();
        for (String key : keySet) {
            //获取value
            String values = user.get(key);
            System.out.println(key + ":" + values);
        }
        //3. 关闭连接
        jedis.close();
    }

    /**
     * list 数据结构操作
     */
    @Test
    public void test3() {
        //1. 获取链接
        Jedis jedis = new Jedis("localhost", 6379);  //默认空参构造 是localhost 6379
        //2. 操作
        //存储list
        jedis.lpush("mylist", "a","b","c");
        jedis.rpush("mylist","a","b","c");

        //list范围获取
        List<String> mylist = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist);
        //list弹出
        String mylist1 = jedis.lpop("mylist");
        System.out.println(mylist1);

        String mylist2 = jedis.rpop("mylist");
        System.out.println(mylist2);
        //3. 关闭连接
        jedis.close();
    }

    /**
     * set 数据结构操作
     */
    @Test
    public void test4() {
        //1. 获取链接
        Jedis jedis = new Jedis("localhost", 6379);  //默认空参构造 是localhost 6379
        //2. 操作
        //存储set
        jedis.sadd("myset", "java","php","c");

        //set获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);

        //3. 关闭连接
        jedis.close();
    }

    /**
     * sortedset 数据结构操作
     */
    @Test
    public void test5() {
        //1. 获取链接
        Jedis jedis = new Jedis("localhost", 6379);  //默认空参构造 是localhost 6379
        //2. 操作
        //存储sortedset
        jedis.zadd("mysortedset",3,"测试1");
        jedis.zadd("mysortedset",10,"测试2");
        jedis.zadd("mysortedset",25,"测试3");

        //sortedset获取
        Set<String> mysortedset = jedis.zrange("mysortedset",0,-1);
        System.out.println(mysortedset);

        //3. 关闭连接
        jedis.close();
    }


    /**
     * jedis连接池使用
     */
    @Test
    public void test6(){
        //创建一个配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);

        //1. 创建jedis连接池对象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);

        //2. 获取连接
        Jedis jedis = jedisPool.getResource();
        //3. 使用
        jedis.set("xx","aa");
        //4. 关闭 归还到连接池中
    }

    @Test
    public void test7(){
        //连接池工具类获取
        Jedis jedis = JedisPoolUtils.getjedis();
        //3. 使用
        jedis.set("xx","aa");

        JedisPoolUtils.close(jedis);
    }
}
